package cn.lcsjsxy.yxc.collections_framework.Collection;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

/**
 * Collection接口中声明方法的测试
 *
 * 结论：
 * 像Collection接口的实现类的对象中添加数据obj时，要求obj所在类要重写equals();
 */
public class CollectionTest1 {
    @Test
    public void test(){
        Collection coll=new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
//        com.yang_xc.miscellaneous.Person p=new com.yang_xc.miscellaneous.Person("Jerry",20);
        coll.add(new Person("Jerry",20));

        //1.contains(Object obj):判断当前集合中是否包含obj
        //我们在判断时会调用obj对象所在类的equals（）
        boolean contains=coll.contains(123);
        System.out.println(contains);  //true
//        System.out.println(coll.contains(p));
        System.out.println(coll.contains(new Person("Jerry",20)));  //false,重写equals方法后为true

        //2.containsAll(Collection coll1):判断形参coll1中的所有元素是否都存在于当前集合中中
        Collection coll1= Arrays.asList(123,456);
        System.out.println(coll.containsAll(coll1));
    }

    @Test
    public void test1(){
        //3.remove(Object obj)：从当前集合中移除obj元素
        Collection coll=new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Jerry",20));

        boolean isRemove=coll.remove(123);
        coll.remove(new Person("Jerry",20));
        System.out.println(isRemove);
        System.out.println(coll);

        //4.removeAll(Collection coll1)差集:从当前集合中移除coll1中相同元素
        Collection coll1=Arrays.asList(456,"Tom");
        coll.removeAll(coll1);  //修改当前集合
        System.out.println(coll);
    }

    @Test
    public void test2(){
        Collection coll=new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Jerry",20));

        //5.retainAll(Collection coll1)交集:获取当前集合和coll1集合的交集，并返回给当前集合
        Collection coll1= Arrays.asList(123,456,789);
        coll.retainAll(coll1);
        System.out.println(coll);

        //6.equals(Object obj)：判断当前集合和形参集合的元素是否相同
        Collection coll2=new ArrayList();  //ArrayList是有序的，所以两个集合里面内容一样但是顺序不一样的话equals就为false
        coll2.add(123);
        coll2.add(456);
        coll2.add(new String("Tom"));
        coll2.add(false);
        coll2.add(new Person("Jerry",20));

        Collection coll3=Arrays.asList(123,456,new String("Tom"),false,new Person("Jerry",20));

        System.out.println(coll2.equals(coll3));
    }

    @Test
    public void test3(){
        Collection coll=new ArrayList();  //ArrayList是有序的，所以两个集合里面内容一样但是顺序不一样的话equals就为false
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Jerry",20));

        //7.hashCode():返回当前对象的哈希值
        System.out.println(coll.hashCode());

        //8.集合--》数组：toArray():返回值为Object类型的数组
        Object[] obj=coll.toArray();
        System.out.println(Arrays.toString(obj));

        //拓展：数组-->集合:调用Arrays类的静态方法asList()
        Collection coll1=Arrays.asList(obj);  //再转回集合
        System.out.println(coll1);

        List<String> list=Arrays.asList(new String[]{"AA","BB","CC"});
        System.out.println(list);

        List arr=Arrays.asList(new int[]{123,456,789});//将其看作一个元素
        System.out.println(arr);  //[[I@2a798d51]

        List arr1=Arrays.asList(new Integer[]{123,456,789});
        System.out.println(arr1);  //[123, 456, 789]

        //9.iterator():返回Iterator接口的实例，用于遍历集合元素，放在IteratorTest.java中测试
    }
}
